﻿using System;
using System.Text;
using System.Drawing;
using System.Buffers;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;

public static partial class glDRIVE
{
    /*
    函数 gl.jacobi
    jacobi法求矩阵特征向量
    参数 a: a[n][n]实对称矩阵。对角线元素返回特征值。
    参数 n: 
    参数 v: v[n][n]返回特征向量
    参数 eps: 精度要求
    参数 inter: 最多迭代次数，200
    返回值 若矩阵不对称，则显示错误信息，且返回0标志值。否则返回迭代次数。本程序最多迭代200次。
    */

    public static string drive_jacobi()
    {
        int i, j;
        double eps;
        double[,] v = new double[3, 3];
        double[,] a = new double[3, 3]{
            {2.0,-1.0,0.0},
            {-1.0,2.0,-1.0},
            {0.0,-1.0,2.0}
        };
        int n = 3;
        eps = 0.000001;

        string rs = "";
        rs += gl.html_table("Mat A:", a);

        i = gl.jacobi(a, n, v, eps, 200);
        if (i <= 0) return "error: " + i;

        rs += gl.html_table("迭代次数= " + i + "，特征值:", a);
        rs += gl.html_table("特征向量:", v);
        return rs;

    }
}